package com.future.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.future.domain.Comment;
import com.future.domain.vo.CommentVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;

import java.util.List;
import java.util.Map;


@Mapper
public interface CommentMapper extends BaseMapper<Comment> {
    /**
     * 查询用户收到的评论数
     * @param userId 用户ID
     * @return 收到的评论数
     */
    Long selectTotalCommentsReceived(@Param("userId") Long userId);

    // 获取目标评论树（一级评论）
    Page<CommentVO> getCommentsByTarget
            (Page<CommentVO> page, @Param("targetId") Long targetId, @Param("targetType") Integer targetType);

    // 分页查询顶级评论
    Page<CommentVO> getTopLevelComments
            (Page<CommentVO> page, @Param("targetId") Long targetId, @Param("targetType") Integer targetType);

    // 子评论查询方法
    Page<CommentVO> getChildComments(
            Page<CommentVO> page,
            @Param("parentId") Long parentId,
            @Param("targetTypeId") Long targetTypeId

    );

    // 新增查询子评论ID的方法（用于删除操作）
    List<Comment> selectChildComments(@Param("parentId") Long parentId);


    //乐观锁更新点赞数
    @Update("update comment set like_count =#{newCount} " +
            "            where id=#{commentId} and like_count=#{oldCount}")
    int updateLikeCount(@Param("commentId") Long commentId,
                        @Param("oldCount") Long oldCount,
                        @Param("newCount")  Long newCount);
}